home *** CD-ROM | disk | FTP | other *** search
/ Amiga Inside! / Amiga FD Inside (1995)(Ultramax).iso / forumamiga / ausgabe09 / texte / basic-kurs.9-ii < prev    next >
Text File  |  1992-09-15  |  6KB  |  148 lines

  1.  
  2.  B  A  S  I  C  -  E  c  k  e     i m   F O R U M   A M I G A  -  Teil: 9-II
  3.  ===========================================================================
  4.  
  5.  
  6. Willkommen zum ersten "richtigen" Teil des BASIC-Kurses.
  7.  
  8. Voraussetzungen hierfür sind "AmigaBASIC" und "Cursor V1.6". Damit ist es
  9. möglich, geschriebene Programme auch gleich zu kompilieren.
  10.  
  11. Das erste Thema, über das ich heute schreiben möchte, ist die Programmsteu-
  12. erung per Maus.
  13.  
  14. Um es gleich grundsätzlich vorweg zu sagen, der Pfeil -> leitet ein Listing
  15. ein und der Pfeil <- zeigt an, daß es im Text weitergeht. Natürlich darf der
  16. Pfeil nicht mit abgetippt werden... :-)
  17.  
  18. Angenommen, Sie wollen eine Auswahl von 10 rechteckigen Gadgets überwachen,
  19. deren Bereiche beliebig sind, allerdings sich nicht überlappen dürfen.
  20.  
  21. Hierzu sollten Sie zuerst einmal die Gadgets definieren:
  22. ->
  23.    Definition:
  24.       DIM a(3,10)
  25. <-
  26. Sie erhalten dabei eine 2-dimensionale Feldvariable a(i,j), wobei i für 0 die
  27. x-Koordinate und für 1 die y-Koordinate der Gadgetecke oben links des Gadgets
  28. Nr. j bezeichnet. Nimmt i den Wert 2 oder 3 an, gilt dasselbe wie oben, nur
  29. diesmal für die Gadgetecke unten rechts. - Soweit klar? - Ok, dann kann´s ja
  30. weitergehen.
  31.  
  32. Nun sollte man die Werte jedes einzelnen Gadgets festlegen. Bei meinem Bei-
  33. spiel gehe ich jetzt mal von 10 regelmäßig auf dem Bildschirm verteilten Gad-
  34. gets aus, die jeweils 90 Pixel breit und 50 Pixel hoch sind. Zwischen allen
  35. Gadgets ist 10 Pixel Freiraum, außerdem sind die Gadgets 5 Pixel vom linken
  36. (folglich auch 145 Pixel vom rechten) und 15 Pixel vom oberen (folglich 75
  37. (NTSC)/131 (PAL) Pixel vom unteren) Rand entfernt. Dieser Platz kann im spä-
  38. teren Programm für eventuelle Text-/Grafik-/sonstige Ausgaben benutzt werden.
  39. Hierzu also ein Programmbeispiel:
  40. ->
  41.    GadgetsWerte:
  42.       FOR j=1 TO 5
  43.          a(0,j)=5+(j-1)*100
  44.          a(1,j)=15
  45.          a(2,j)=95+(i-1)*100
  46.          a(3,j)=65
  47.       NEXT
  48.       FOR j=6 TO 10
  49.          a(0,j)=5+(j-1)*100
  50.          a(1,j)=75
  51.          a(2,j)=95+(i-1)*100
  52.          a(3,j)=125
  53.       NEXT
  54. <-
  55. Um die Gadgets auf den Bildschirm zu bringen, könnte man so vorgehen:
  56. ->
  57.    PrintGadgets:
  58.       FOR j=1 to 10
  59.          LINE (a(0,j),a(1,j))-(a(2,j),a(3,j)),b
  60.       NEXT
  61. <-
  62. Hiermit werden alle 10 Gadgets auf den Bildschirm gebracht, allerdings nur
  63. die Rahmen. Sollten Sie die Gadgets gefüllt haben wollen, müssen Sie am Ende
  64. der LINE-Zeile noch ein F anfügen (also ...,bf).
  65.  
  66. So, die Gadgets wären auf dem Bildschirm zu sehen. Aber wie bringe ich meinen
  67. Compi dazu, auf das Mausklicken auf die Gadgets richtig zu reagieren?
  68. Ganz einfach: Wir bedienen uns der MOUSE-Funktion:
  69. ->
  70.    AuswahlCheck:
  71.       WHILE MOUSE(0)=0:WEND   ' wartet auf den Druck der linken Maustaste
  72.       x=MOUSE(3)              ' liefert den x-Wert
  73.       y=MOUSE(4)              ' liefert den y-Wert
  74. <-
  75. Man hat jetzt die x- und y-Position des Mausklicks. Es gilt nun nur noch zu
  76. prüfen, auf welches Gadget geklickt wurde:
  77. ->
  78.    CheckGadget:
  79.       IF y<65 AND y>15 THEN row=1      ' falls ja, dann 1. Gadgetreihe
  80.       IF y<125 AND y>75 THEN row=2     ' falls ja, dann 2. Gadgetreihe
  81.       IF x>5 AND x<95 THEN gad=1       ' Gadget 1
  82.       IF x>105 AND x<195 THEN gad=2    ' Gadget 2
  83.       IF x>205 AND x<295 THEN gad=3    ' Gadget 3
  84.       IF x>305 AND x<395 THEN gad=4    ' Gadget 4
  85.       IF x>405 AND x<495 THEN gad=5    ' Gadget 5
  86.       IF row=2 THEN gad=gad+5          ' Gadget 6-10 (folgt aus 2. Gadgetr.)
  87.       IF gad=0 THEN GOTO AuswahlGadget ' falls Klick nicht auf Gadget,nochmal
  88. <-
  89. Nun kann man die Eingaben verarbeiten, indem man "IF gad=x THEN ..." benutzt.
  90.  
  91. Das wär´s dann auch eigentlich schon. Aber in den meisten Programmen genügt
  92. das nicht. Denn was tun, wenn Funktionen sowohl über Tastatur als auch per
  93. Maus aufrufbar sein sollen?
  94.  
  95. Ganz einfach, es muß nur das Unterprogramm "AuswahlCheck" durch das unten
  96. stehende "TastOderMaus" ersetzt werden.
  97. ->
  98.    TastOderMaus:
  99.       s$="":t=0
  100.       WHILE s$="" AND t=0
  101.          s$=INKEY$
  102.          t=MOUSE(0)
  103.       WEND
  104.       IF s$<>"" THEN GOTO TastDruck
  105.       x=MOUSE(3)
  106.       y=MOUSE(4)
  107. <-
  108. Falls eine Taste gedrückt wurde, wird nach TastDruck verzweigt, wo man pro-
  109. blemlos die Eingaben verarbeiten kann. Wurde die Maustaste gedrückt, fährt
  110. das Programm einfach fort (es sollte anschließend die Routine "CheckGadget"
  111. folgen).
  112.  
  113. Es gibt noch eine weitere Möglichkeit, den Druck auf die linke Maustaste "ab-
  114. zufangen". Dazu muß am Programmstart "ON MOUSE GOSUB xxx" stehen. Sobald
  115. dann die Maustastenabfrage beginnen sollte, muß ein "MOUSE ON" folgen. Wenn
  116. die Mausabfrage beendigt sein soll, muß ein "MOUSE OFF" angegeben werden.
  117. Es muß natürlich irgendwo ein Unterprogramm namens "xxx" stehen. Das könnte
  118. z.B. so aussehen:
  119. ->
  120.    xxx:
  121.       t=MOUSE(0)
  122.       x=MOUSE(3)
  123.       x=MOUSE(4)
  124. <-
  125. Anschließend muß wieder "CheckGadget" benutzt werden.
  126.  
  127. Diese Art der Programmierung ist besonders dann nützlich, wenn man zusätzlich
  128. auch noch mit Menüs arbeitet - allerdings werde ich auf die Menüprogrammie-
  129. rung erst in einem späteren Kursteil eingehen.
  130.  
  131. Und dann wären wir auch schon am Ende dieses Kursteils angelangt. - Ich hof-
  132. fe, er war fehlerfrei und hat Ihnen ein paar neue Erkenntnisse gebracht.
  133. Bis dann in der nächsten FORUM AMIGA-Ausgabe,
  134.  
  135.  
  136. Stefan Grad.
  137.  
  138. P.S.: Natürlich dürfen alle Routinen in eigene Programme eingebaut werden,
  139.       ein Hinweis auf die Quelle sollte aber dabei sein (z.B. in der Anlei-
  140.       tung erwähnen: einige Routinen stammen aus dem Forum-Amiga-Basic-Kurs
  141.       von Stefan Grad). Auch ein Exemplar des Programmes für meine FD-Serie
  142.       "GPD" wäre ganz nett...
  143.  
  144.  
  145. © 9/1992 by Stefan Grad. Dieser Bericht ist exklusiv für das FORUM AMIGA.
  146. Andersweitige Verbreitung erst nach meiner schriftlichen Genehmigung !!!
  147.  
  148.